from typing import Optional

from python.mypackage import ListNode


class Solution:
    """
    方法：删除链表中所有重复的节点，只保留不重复的节点
    
    Args:
        head: Optional[ListNode] - 输入链表的头节点
        
    Returns:
        Optional[ListNode] - 删除重复节点后的链表头节点
        
    Time: O(n) - 需要遍历整个链表一次
    
    Space: O(1) - 只使用常数额外空间
    """
    def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:
        cur = dummy = ListNode(next = head)
        while cur.next and cur.next.next:
            val = cur.next.val
            if val == cur.next.next.val: #后面两个节点值相同
                # 值等于 val 的节点全部删除
                while cur.next and cur.next.val == val:
                    cur.next = cur.next.next
            else:
                cur = cur.next
        return dummy.next